#ifndef CUSTOMLISTWIDGET_H
#define CUSTOMLISTWIDGET_H

#include <QListWidget>

class CustomListWidget : public QListWidget
{
    Q_OBJECT
public:
    CustomListWidget(QWidget *parent=nullptr);

protected:
    // 当鼠标点击列表内的空白区域时，清除选中项
    void mousePressEvent(QMouseEvent *event);
    // 当键盘按下UP/DOWN时，移动选中项
    void keyPressEvent(QKeyEvent *event);

public slots:
    // 往该listwidget的末尾添加一个checkable的有icon的item
    // text 设为参数 $label$，icon设为纯色的 $color$，默认check的状态设为参数 $checked$
    void addCustomItem(QString label, QColor color, bool checked);

    // 往该listwidget的 $idx$ 位置添加一个checkable的有icon的item
    // text 设为参数 $label$，icon设为纯色的 $color$，默认check的状态设为参数 $checked$
    void insertCustomItem(QString label, QColor color, bool checked, int idx);

    // 往该listwidget的末尾添加一个uncheckable的有icon的item
    // text 设为参数 $label$，icon设为纯色的 $color$
    void addCustomItemUncheckable(QString label, QColor color);

    // 往该listwidget的 $idx$ 位置添加一个uncheckable的有icon的item
    // text 设为参数 $label$，icon设为纯色的 $color$
    void insertCustomItemUncheckable(QString label, QColor color, int idx);

    // 删除对应text为 $label$ 的item
    void removeCustomItem(QString label);
    // 更改对应text为 $label$ 的item的icon的颜色为 $color$
    void changeIconColor(QString label,QColor color);
    // 更改对应text为 $label$ 的item的check状态为 $checked$
    void changeCheckState(QString label, bool checked);

    // 删除对应idx为 $idx$ 的item
    void removeCustomItemByIdx(int idx);
    // 更改对应idx为 $idx$ 的item的icon的颜色为 $color$
    void changeIconColorByIdx(int idx,QColor color);
    // 更改对应idx为 $idx$ 的item的text为 $text$
    void changeTextByIdx(int idx, QString text);

private:
    QListWidgetItem* _findItemByText(QString label);
};

#endif // CUSTOMLISTWIDGET_H
